#ifndef _CAMERA_H
#define _CAMERA_H

#include "../StdAfx.h"
#include "../Graphics/GraphicsLayer.h"

#define DEFAULT_MOVEMENT_SPEED 0.5 // La velocidad de desplazamiento
#define DEFAULT_ROTATION_ANGLE 0.2 // La velocidad de desplazamiento

#define DEFAULT_ROTATION_SPEED 0.5
#define DEFAULT_JUMP_SPEED 2.0

struct Vector3 {
    float x;
    float y;
    float z;
};

class cCamera {
    
private:
    
public:
   
   /**
     * Rotacion actual en el eje Y (mirar hacia los costados), en radianes
     * @type float
     */
   float m_pCurrentRotY;   
   /**
     * Rotacion actual en XZ (mirar hacia arriba-abajo), en radianes
     * @type float
     */
   float m_pCurrentRotXZ;
            
    Vector3 m_pPos;
    Vector3 m_pLookAt;
    Vector3 m_pUpVector;
    
    float m_pCurrentRotation;
    
    // Metodos publicos
    cCamera();
    ~cCamera();

    void update(float elapsedTime);
    void render();
    
    // OPERADORES MATEMATICOS PARA VECTORES
    Vector3 cross(Vector3 vec, Vector3 vec2);
    void scale(Vector3 *vec, float val);
    void add(Vector3 *vec, Vector3 vec2);
    void normalize(Vector3 *vec);
};

#endif // _CAMERA_H